<?php
namespace App\Http\Controllers;

// 引入用户验证门面
use Illuminate\Support\Facades\Auth;
use Hash;
use App\UserSmbms;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Requests\LoginRequest;
use Illuminate\Support\Facades\Session;

class userAdminController extends Controller{

    // 列表页
    public function index(){
        
        // 分页，传入需要显示的记录数
        $userList=UserSmbms::paginate(6);
        return view("user.index",[
            "userList"=>$userList
        ]);
    }
    // 登录请求表单
    public function loginIndex(){

        return view("user.login");
    }

    // 登录请求表单
    public function login(Request $loginRequest){
        
        
            // 指定使用UserSmbms验证用户
            $user=Auth::guard('UserSmbms')->attempt($loginRequest->only(["userName","password"]));
            // $users=new UserSmbms($loginRequest->only(["userName","password"]));
            // return var_dump(Auth::check());
            if($user){
                // Auth::login($users,true);
                // var_dump($user);
                // exit;
                // dd($loginRequest->session()->all());
                // return var_dump(Auth::check());
               return redirect()->route("userindex")->with("success","登录成功");

            }

            return redirect("userLogin")->with("fail","登录失败");
                   
    }

    // 新增用户页面
    public function create(Request $request){
        
        if($request->isMethod("POST")){


            // 如果没有通过验证表单的值，就会自动报错，但是整个方法中的错误会被
            // web组件数组中的ShareErrorsFromSession中间件捕获，并直接返回之前请求的页面
            // 并将错误的信息以errors为键，存入session中
            // 设置表单验证
            // $this->validate($request,[
            //     // 第二个参数数组设置每个空间的验证规则，验证规则为预先定义的参数

            //     // 设置表单值数组中的userName属性一定要有，且最少两个字，最大20个字
            //     "UserSmbms.userName"=>"required|min:2|max:20",
            //      // 设置表单值数组中的gender属性一定要有，且必须为整数
            //     "UserSmbms.gender"=>"required|integer",
            //     // 设置表单值数组中的gender属性一定要有
            //     "UserSmbms.phone"=>"required"

            // ],[
            //     // 第三个参数数组设置自定义每个验证规则的中文意思

            //     "required"=>":attribute 为必填项",
            //     "min"=>":attribute 最少两个字",
            //     "integer"=>":attribute 必须为整数"
            // ],[

            //     // 第四个参数设置回传信息中的表单空间name属性，在用户看来的实际意思
            //     "UserSmbms.userName"=>"用户账户名",
            //     "UserSmbms.gender"=>"用户性别",
            //     "UserSmbms.phone"=>"用户手机号"

            // ]);


                // 此种方法用法和上面一样的验证规则，只不过是生成了错误类，并不会抛出异常，并将错误信息全部放进错误类中，
                // 并不会自动返回页面和将错误信息放入session中，需要手动返回
               $validator =\Validator::make($request->input(),[
                    // 第二个参数数组设置每个空间的验证规则，验证规则为预先定义的参数
    
                    // 设置表单值数组中的userName属性一定要有，且最少两个字，最大20个字
                    "UserSmbms.userName"=>"required|min:2|max:20",
                     // 设置表单值数组中的userPassword属性一定要有
                     "UserSmbms.password"=>"required |confirmed",
                     "UserSmbms.password_confirmation"=>"required",
                     // 设置表单值数组中的gender属性一定要有，且必须为整数
                    "UserSmbms.gender"=>"required|integer",
                    // 设置表单值数组中的gender属性一定要有
                    "UserSmbms.phone"=>"required"
                
                ],[
                    // 第三个参数数组设置自定义每个验证规则的中文意思

                    "required"=>":attribute 为必填项",
                    "min"=>":attribute 最少两个字",
                    "integer"=>":attribute 必须为整数",
                    "confirmed"=>":attribute 两次密码不一致"
                
                ],[
    
                    // 第四个参数设置回传信息中的表单空间name属性，在用户看来的实际意思
                    "UserSmbms.userName"=>"用户账户名",
                    "userSmbms.password"=>"用户密码",
                    "UserSmbms.gender"=>"用户性别",
                    "UserSmbms.phone"=>"用户手机号",
                    "UserSmbms.password_confirmation"=>"用户密码"
    
                ]);
                // 判断上面根据请求信息生成的错误类中是否有错误信息
                if($validator->fails()){

                    // 如果有错误信息就返回上一个页面
                    return redirect()->back()
                    // 并将错误类传进withErrors()函数中，取出错误类中的错误信息
                    // 自动将将错误信息存入session闪存中
                    ->withErrors($validator)
                    //因为是返回上一个表单页面，所以有必要将用户在上一个页面填的数据返回保持在表单控件中
                    // 这样用户也能知道自己哪里填错了,附加上withInput方法()
                    ->withInput();
                }



            $data=$request->input("UserSmbms");
            $data["password"]=Hash::make($data["password"]);
            // 将验证密码的表单控件值取出
            unset($data["password_confirmation"]);
            //保存用户数据，直接存数组
            $user=new UserSmbms();
            foreach($data as $key=>$val){

                // 逐一给当前的用户对象属性赋值
                $user->$key=$val;
                
            }
            if(!$user->save()){

                return redirect("usercreate")->with("fail","添加失败");

            }
            return redirect("userindex")->with("success","添加成功");
        }
        return view("user.create");
    }
    // 新增的方法
    public function save(Request $request){

        $data=$request->input("UserSmbms");

        //保存用户数据，直接存数组
        $user=new UserSmbms();
        foreach($data as $key=>$val){

            $user->$key=$val;
        }

        if($user->save()){
            return redirect("userindex");
        }else{
            return redirect()->back();
        }
        // dd($data);
    }    

    // 更新数据的方法
    public function update(Request $request,$id){

       
        // 判断当前的提交方法是否为post
        if($request->isMethod("POST")){ 
            
            // 取出表单中提交的数据,提交更新数据
            $data=$request->input("UserSmbms");
            // 更新数据
            $bool=UserSmbms::where("id",$id)
            ->update($data); 
             if($bool){
                return redirect("update/".$id)->with("success","修改成功");
             }else{ 
                return redirect("update/".$id)->with("fail","修改失败");
             }
        }
        $user=UserSmbms::find($id);
        return view("user.update",[
            "user"=>$user
        ]);
    }

    public function delete($id){


        $bool=UserSmbms::where("id",$id)
        ->delete();

        $bool=true;
        if($bool){

            return redirect("userindex")->with(["success"=>"删除成功"]);
        }else{

            return redirect("userindex")->with(["fail"=>"删除失败"]);
        }
    }

    public function detail(Request $request,$id){

        

        $userDetail=UserSmbms::find($id);

        

        return view("user.detail",[
            "userDetail"=>$userDetail
        ]);
        // dd($userDetail);

    }

}